package com.itheima.reggie.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

//创建配置类,设置静态资源映射,否则无法访问页面
//slf4j 是lombok中提供的注解, 用来通过slf4j记录日志。
@Configuration
@Slf4j
public class WebMvcConfig extends WebMvcConfigurationSupport {
    //配置映射地址和资源路径
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {

        log.debug("调用了设置静态资源方法.....");

        //配置映射地址和资源路径
        registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/static/backend/");
        registry.addResourceHandler("/front/**").addResourceLocations("classpath:/static/front/");

    }

    //修改状态时long类型数据转换精度丢失
    //扩展消息转换器  主要目的是告诉jackson 转换JavaBean对象成json字符串的时候,具体的一些类型要转换什么类型
    //例long类型-----String类型
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        //1. 创建映射消息转换器jackson 转化JavaBean成json字符串的转换器对象
        MappingJackson2HttpMessageConverter mc = new MappingJackson2HttpMessageConverter();

        //2,将定义好的映射规则对象，丢到上面的转换器里面
        mc.setObjectMapper(new JacksonObjectMapper());

        //3.把定义好的消息转换器,丢到集合里面去
        //集合里面有8个转换器需要将自己设定的转换器移到最前才会执行
        converters.add(0,mc);
    }
}
